<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script type="text/javascript">
    function myfunc(a,b,c){
        return a + b + c;
    }

    console.log(myfunc.toString());

    // call()与apply()方法

    // 下面我们定义一个some_obj对象，该对象中有一个say()方法
    // 这样一来，我们就可以调用该对象的say()方法，并在其中实用this.name来访问其name属性
    var some_obj = {
        name: 'Ninja',
        say: function(who) {
            return 'Haya '+who+', I am a ' + this.name;
        }
    }
    console.log(some_obj.say('Dude'));

    // 下面我们再来创建一个my_obj对象，他只有一个name属性
    var my_obj = {name: 'Scripting guru'};

    // 显然，some_obj的say方法也适用于my_obj，因此我们希望将该方法当做my_obj自身的方法来调用。在这种情况下，我们就可以试试say()函数中的对象方法call():
    console.log(some_obj.say.call(my_obj, 'Dude'));

    // apply()方法传入的是一个数组
    console.log(some_obj.say.apply(my_obj,['a','b','c']));
    console.log(some_obj.say.call(my_obj,'a','b','c'));
</script>
</body>
</html>
